# 定义编译器
CC = gcc
AS = as

# 定义目标可执行文件名
TARGET = prog

# 定义源文件
C_SOURCES = a.c b.c c.c d.c
ASM_SOURCE = assmb.s

# 生成对应的目标文件
OBJS = $(C_SOURCES:.c=.o) $(ASM_SOURCE:.s=.o)

# 定义头文件依赖
DEPS = defs.h

# 定义库路径和库文件
LIB_DIR = /home/user/lib
LIBS = -L$(LIB_DIR) -lm

# 编译选项
CFLAGS = -Wall -g
ASFLAGS = 

# 默认目标
all: $(TARGET)

# 生成可执行文件
$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)

# C源文件编译规则
%.o: %.c $(DEPS)
	$(CC) $(CFLAGS) -c -o $@ $<

# 汇编源文件编译规则
%.o: %.s
	$(AS) $(ASFLAGS) -o $@ $<

# 显式声明b.o和d.o对defs.h的依赖
b.o: defs.h
d.o: defs.h

# 清理规则
clean:
	rm -f $(OBJS) $(TARGET)

# 伪目标声明
.PHONY: all clean
